package com.jevons.muffin.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

/**
 * BaseAdapter封装类
 *
 * @Date 2016年4月20日
 */
public abstract class BaseAdapter<T> extends android.widget.BaseAdapter {

    protected Context context;
    //adapter数据管理类
    private AdapterAction<T> adapterAction;

    /**
     * @param context Context
     */
    public BaseAdapter(Context context) {
        init(context, new ArrayList<T>());
    }

    /**
     * @param context Context
     * @param list    Adapter数据
     */
    public BaseAdapter(Context context, List<T> list) {
        init(context, list);
    }

    /**
     * 初始化数据
     *
     * @param context Context
     * @param list    Adapter数据
     */
    private void init(Context context, List<T> list) {
        this.adapterAction = new AdapterAction<T>(context, list);
        this.context = context;
    }

    /**
     * @return context
     */
    public Context getContext() {
        return this.context;
    }

    /**
     * 添加数据
     *
     * @param list Adapter数据
     */
    public void addAll(List<T> list) {
        adapterAction.addAll(list);
        notifyDataSetChanged();
    }

    /**
     * 清除数据
     */
    public void clear() {
        this.adapterAction.clear();
        notifyDataSetChanged();
    }

    /**
     * 获取list的数据
     *
     * @return Adapter数据
     */
    public List<T> getList() {
        return this.adapterAction.getList();
    }

    /**
     * 设置list数据
     *
     * @param list Adapter数据
     */
    public void setList(List<T> list) {
        this.adapterAction.setList(list);
    }

    /**
     * 【Viewholder】listview数据优化，复用convertView
     *
     * @param view adapter中需要复用的view(convertView)
     * @param id   资源id
     * @param <V>  资源控件
     * @return 优化后的View对象
     */
    protected <V extends View> V get(View view, int id) {
        return ViewHolder.get(view, id);
    }

    /**
     * 得到adapter的数量
     *
     * @return adapter的数量
     */
    @Override
    public int getCount() {
        return this.adapterAction.getCount();
    }

    /**
     * 获取item数据
     *
     * @param position 位置
     * @return item数据
     */
    @Override
    public T getItem(int position) {
        return this.adapterAction.getItem(position);
    }

    /**
     * 获取position
     *
     * @param position 位置
     * @return position
     */
    @Override
    public long getItemId(int position) {
        return position;
    }

    /**
     * 加载布局
     *
     * @param layout 布局资源文件
     * @return 布局View
     */
    protected View inflate(int layout) {
        return this.adapterAction.inflate(layout, null);
    }



    /**
     * 加载布局（有父布局的情况下用此方法）
     *
     * @param layout
     * @param viewGroup
     * @return View
     */
    protected View inflate(int layout, ViewGroup viewGroup) {
        return this.adapterAction.inflate(layout, viewGroup);
    }

}
